/******************************************************************************* * Copyright (c) 2008, 2011 Obeo. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Obeo - initial API and implementation *******************************************************************************/ package org.eclipse.emf.eef.runtime.ui.gwt.dialog; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.common.util.Diagnostic; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.DialogBox; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.Tree; import com.google.gwt.user.client.ui.TreeItem; /** * @author glefur * */ public class ErrorDialog extends DialogBox { private Tree tree; private Object selection; public ErrorDialog(String errorText, Throwable caught) { super(); this.setText(errorText); List<Throwable> throwables = new ArrayList<Throwable>(); throwables.add(caught); createDialogControl(); tree.addItem(createTreeItems(caught)); } public ErrorDialog(String errorText, Diagnostic diagnostic) { this.setText(errorText); createDialogControl(); tree.addItem(createTreeItems(diagnostic)); } public ErrorDialog(String errorText, List<Diagnostic> children) { this.setText(errorText); createDialogControl(); for (Diagnostic diagnostic : children) { tree.addItem(createTreeItems(diagnostic)); } } public void open() { this.show(); } protected void createDialogControl() { final Button okButton = new Button("OK"); tree = new Tree(); Grid grid = new Grid(); grid.setWidth("150em"); grid.resize(2, 1); grid.setWidget(0, 0, tree); grid.setWidget(1, 0, okButton); this.setWidget(grid); okButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { TreeItem selectedItem = tree.getSelectedItem(); ErrorDialog.this.hide(); processError(selectedItem); } }); } private TreeItem createTreeItems(Throwable throwable) { return new TreeItem(throwable.getLocalizedMessage()); } private TreeItem createTreeItems(Diagnostic diagnostic) { if (diagnostic.getSeverity() == Diagnostic.OK) { return new TreeItem("No problems detected"); } else { TreeItem treeItem = new TreeItem(diagnostic.getMessage()); List<?> data = diagnostic.getData(); if (!data.isEmpty()) { treeItem.setUserObject(data.get(0)); } for (Diagnostic child : diagnostic.getChildren()) { treeItem.addItem(createTreeItems(child)); } return treeItem; } } protected Object processError(TreeItem selection) { return null; } /** * @return the selection */ public Object getSelection() { return selection; } }