Skip to content

Commit

Permalink
Unify system error messages (#4542)
Browse files Browse the repository at this point in the history
* Unify system error messages

Fixes #3777

* Remove duplicate logging call

* Fix a test by finding only direct children of body with class 'message'
  • Loading branch information
Denis authored and pekam committed Aug 21, 2018
1 parent 80499bb commit 800446b
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 36 deletions.
71 changes: 36 additions & 35 deletions flow-client/src/main/java/com/vaadin/client/SystemErrorHandler.java
Original file line number Diff line number Diff line change
Expand Up @@ -93,43 +93,16 @@ public void handleUnrecoverableError(String caption, String message,
return;
}

Document document = Browser.getDocument();
Element systemErrorContainer = document.createDivElement();
systemErrorContainer.setClassName("v-system-error");

if (caption != null) {
Element captionDiv = document.createDivElement();
captionDiv.setClassName("caption");
captionDiv.setInnerHTML(caption);
systemErrorContainer.appendChild(captionDiv);
Console.error(caption);
}
if (message != null) {
Element messageDiv = document.createDivElement();
messageDiv.setClassName("message");
messageDiv.setInnerHTML(message);
systemErrorContainer.appendChild(messageDiv);
Console.error(message);
}
if (details != null) {
Element detailsDiv = document.createDivElement();
detailsDiv.setClassName("details");
detailsDiv.setInnerHTML(details);
systemErrorContainer.appendChild(detailsDiv);
Console.error(details);
}

Element systemErrorContainer = handleError(caption, message, details);
systemErrorContainer.addEventListener("click",
e -> WidgetUtil.redirect(url), false);

document.addEventListener(Event.KEYDOWN, e -> {
Browser.getDocument().addEventListener(Event.KEYDOWN, e -> {
int keyCode = ((KeyboardEvent) e).getKeyCode();
if (keyCode == KeyCode.ESC) {
WidgetUtil.redirect(url);
}
}, false);

document.getBody().appendChild(systemErrorContainer);
}

/**
Expand All @@ -140,20 +113,16 @@ public void handleUnrecoverableError(String caption, String message,
* the error message to show
*/
public void handleError(String errorMessage) {
Console.error(errorMessage);
if (registry.getApplicationConfiguration().isProductionMode()) {
Console.error(errorMessage);
return;
}

Document document = Browser.getDocument();
Element errorContainer = document.createDivElement();
errorContainer.setClassName("v-system-error");
errorContainer.setTextContent(errorMessage);
Element errorContainer = handleError(null, errorMessage, null);
errorContainer.addEventListener("click", e -> {
// Allow user to dismiss the error by clicking it.
errorContainer.getParentElement().removeChild(errorContainer);
});
document.getBody().appendChild(errorContainer);
}

/**
Expand All @@ -172,6 +141,38 @@ public void handleError(Throwable throwable) {
}
}

private Element handleError(String caption, String message,
String details) {
Document document = Browser.getDocument();
Element systemErrorContainer = document.createDivElement();
systemErrorContainer.setClassName("v-system-error");

if (caption != null) {
Element captionDiv = document.createDivElement();
captionDiv.setClassName("caption");
captionDiv.setInnerHTML(caption);
systemErrorContainer.appendChild(captionDiv);
Console.error(caption);
}
if (message != null) {
Element messageDiv = document.createDivElement();
messageDiv.setClassName("message");
messageDiv.setInnerHTML(message);
systemErrorContainer.appendChild(messageDiv);
Console.error(message);
}
if (details != null) {
Element detailsDiv = document.createDivElement();
detailsDiv.setClassName("details");
detailsDiv.setInnerHTML(details);
systemErrorContainer.appendChild(detailsDiv);
Console.error(details);
}

document.getBody().appendChild(systemErrorContainer);
return systemErrorContainer;
}

private static Throwable unwrapUmbrellaException(Throwable e) {
if (e instanceof UmbrellaException) {
Set<Throwable> causes = ((UmbrellaException) e).getCauses();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,8 @@ public void loadingUnavailableResourcesProduction() {
}

private List<String> getMessages() {
List<WebElement> elements = findElements(By.className("message"));
List<WebElement> elements = findElements(
By.xpath("html/body/*[@class='message']"));
List<String> messages = new ArrayList<>();
for (WebElement element : elements) {
messages.add(element.getText());
Expand Down

0 comments on commit 800446b

Please sign in to comment.