org.geomajas.gwt2.client.widget.exception.ExceptionDialog Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of geomajas-client-gwt2-server-extension Show documentation
Show all versions of geomajas-client-gwt2-server-extension Show documentation
Geomajas GWT2 client: Main - Server Extension
/*
* This is part of Geomajas, a GIS framework, http://www.geomajas.org/.
*
* Copyright 2008-2014 Geosparc nv, http://www.geosparc.com/, Belgium.
*
* The program is available in open source according to the GNU Affero
* General Public License. All contributions in this program are covered
* by the Geomajas Contributors License Agreement. For full licensing
* details, see LICENSE.txt in the project root.
*/
package org.geomajas.gwt2.client.widget.exception;
import org.geomajas.gwt2.client.i18n.GlobalMessages;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PopupPanel.PositionCallback;
/**
* Dialog for showing Exceptions. It is not recommended to use this in your applications, it is meant only for internal
* Geomajas affairs.
*
* @author Jan De Moerloose
* @author Jan Venstermans
*/
public class ExceptionDialog {
static {
ExceptionDialogResource resource = GWT.create(ExceptionDialogResource.class);
resource.css().ensureInjected();
};
/**
* {@link UiBinder} for this class.
*
* @author Jan De Moerloose / Jan Venstermans
*/
interface ExceptionUiBinder extends UiBinder {
}
private static final ExceptionUiBinder UIBINDER = GWT.create(ExceptionUiBinder.class);
private String message;
private String stack = "This is a stack trace\nWith a lot of lines\nand so on\nand so on\nand so on\nand so on";
private ExceptionDialogBox exceptionDialog;
private static GlobalMessages messages = GWT.create(GlobalMessages.class);
@UiField
protected Label messageLabel;
@UiField
protected Button detailsButton;
@UiField
protected HTML stackPanel;
public ExceptionDialog(String message, String stack) {
exceptionDialog = UIBINDER.createAndBindUi(this);
exceptionDialog.setText(messages.exceptionDialogCaptionText());
stackPanel.setVisible(false);
this.message = message;
this.stack = stack;
}
public void clear() {
messageLabel.setText("");
stackPanel.setHTML("");
}
public void show() {
clear();
stackPanel.setHTML(new SafeHtmlBuilder().appendEscapedLines(stack).toSafeHtml());
messageLabel.setText(message);
messageLabel.setWordWrap(true);
exceptionDialog.setPopupPositionAndShow(new PositionCallback() {
@Override
public void setPosition(int offsetWidth, int offsetHeight) {
exceptionDialog.center();
}
});
exceptionDialog.center();
}
@UiHandler("detailsButton")
void handleDetail(ClickEvent e) {
toggleStackPanel();
}
private void toggleStackPanel() {
stackPanel.setVisible(!stackPanel.isVisible());
detailsButton.setText(stackPanel.isVisible() ? messages.exceptionDialogCloseDetails() : messages
.exceptionDialogShowDetails());
}
}