Show proper error message in UI when document cannot be loaded Instead of showing a broken iframe, display a proper error message when a document cannot be loaded. This is a preparation step to add special handling if the document is not found, e.g. in this case we may want to display a 'Create' button to create the missing document. Change-Id: Ic0b7383da84f2351c24ae49eccc7c8f6fc421c9d Signed-off-by: Edwin Kempin <edwin.kempin@sap.com>
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; +}