org.jboss.tools.common.model.ui.dialog.ErrorDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.tools.common.model.ui.dialog.ErrorDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
 * Distributed under license by Red Hat, Inc. All rights reserved.
 * This program is 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:
 *     Exadel, Inc. and Red Hat, Inc. - initial API and implementation
 ******************************************************************************/
package org.jboss.tools.common.model.ui.dialog;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IconAndMessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.jboss.tools.common.meta.key.WizardKeys;
import org.jboss.tools.common.CommonPlugin;
import org.jboss.tools.common.reporting.ProblemReportingHelper;
import org.jboss.tools.common.model.XModelException;
import org.jboss.tools.common.model.plugin.ModelPlugin;
import org.jboss.tools.common.model.ui.reporting.ProblemReporter;
import org.jboss.tools.common.model.ui.reporting.ReportPreference;

public class ErrorDialog extends IconAndMessageDialog {
    private Control dropDown;
    private Throwable exception;
    private Button detailsButton;
    private Button getAwayButton;
    private String title;
    protected static final int TEXT_HEIGHT = 200;
    private boolean dropDownCreated = false;
    private String problemText;

    Text text;

    public ErrorDialog(Shell shell, String title, String message, Throwable exception) {
        super(shell);
        setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE | SWT.APPLICATION_MODAL);
        this.exception = exception;
        this.title = title;
        this.message = message;
    }

    public ErrorDialog(Shell shell, String title, Throwable exception) {
        super(shell);
        setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE | SWT.APPLICATION_MODAL);
        this.exception = exception;
        this.message = exception.getMessage();
        this.title = title;
    }

    protected static boolean shouldDisplay(IStatus status, int mask) {
        return true;
    }

    protected void configureShell(Shell shell) {
        super.configureShell(shell);
        shell.setText(title);
    }

    protected void createButtonsForButtonBar(Composite parent) {
        createButton(parent, IDialogConstants.OK_ID, "Submit", false);
        if (exception != null) {
            detailsButton = createButton(parent, IDialogConstants.DETAILS_ID, IDialogConstants.SHOW_DETAILS_LABEL,
                    false);
            createButton(parent, IDialogConstants.CANCEL_ID, "Cancel", false);
        }
    }

    protected Control createDialogArea(Composite parent) {
        createMessageArea(parent);

        getAwayButton = new Button(parent, SWT.CHECK);
        getAwayButton.setSelection(false);
        getAwayButton.setText("Do not show this dialog again");
        GridData data = new GridData(GridData.FILL_HORIZONTAL);
        data.horizontalSpan = 2;
        getAwayButton.setLayoutData(data);

        // create a composite with standard margins and spacing
        Composite composite = new Composite(parent, SWT.NONE);
        composite.setLayout(createLayout());
        GridData childData = new GridData(GridData.FILL_BOTH);
        childData.horizontalSpan = 2;
        composite.setLayoutData(childData);
        composite.setFont(parent.getFont());
        return composite;

    }

    GridLayout createLayout() {
        GridLayout gl = new GridLayout(2, false);
        gl.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
        gl.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
        gl.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
        gl.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
        return gl;
    }

    protected Control createDropDownControl(Composite parent) {
        // create the list
        text = new Text(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI);

        // print the stacktrace in the text field
        text.setText((problemText == null || problemText.trim().length() == 0) ? createProblemText() : problemText);

        GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL
                | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH);
        data.heightHint = TEXT_HEIGHT;
        data.horizontalSpan = 2;
        text.setLayoutData(data);
        text.setFont(parent.getFont());

        dropDownCreated = true;

        return text;
    }

    private String createProblemText() {
        String problem = exception == null ? "" : ProblemReporter.throwableToString(message, exception); //$NON-NLS-1$
        return wrapProblem(problem);
    }

    private String wrapProblem(String problem) {
        StringBuffer sb = new StringBuffer();
        //      sb.append(getEnvironment()).append("\n");
        sb.append("------Type your additional comment here--------\n\n");

        sb.append("-----------------------------------------------\n"); //$NON-NLS-1$
        sb.append(problem);
        return sb.toString();
    }

    /**
     * @return
     */
    private String getEnvironment() {
        return CommonPlugin.getEnvironment();
    }

    protected void buttonPressed(int id) {
        if (text == null || text.isDisposed()) {
            if (problemText == null) {
                problemText = createProblemText();
            }
        } else {
            problemText = text.getText();
        }
        if (id == IDialogConstants.DETAILS_ID) {
            // was the details button pressed?
            toggleDetailsArea();
        } else {
            super.buttonPressed(id);
        }
    }

    protected void okPressed() {
        if (getAwayButton.getSelection()) {
            try {
                ReportPreference.SHOW_ERROR_DIALOG_OPTION.setValue("no"); //$NON-NLS-1$
                ReportPreference.SUBMIT_AUTOMATICALLY_OPTION.setValue("yes"); //$NON-NLS-1$
            } catch (XModelException e) {
                ModelPlugin.getPluginLog().logError(e);
            }
        }
        super.okPressed();
        submit();
    }

    protected void cancelPressed() {
        if (getAwayButton.getSelection()) {
            try {
                ReportPreference.SHOW_ERROR_DIALOG_OPTION.setValue("no"); //$NON-NLS-1$
            } catch (XModelException e) {
                ModelPlugin.getPluginLog().logError(e);
            }
        }
        super.cancelPressed();
    }

    protected void submit() {
        String email = ReportPreference.E_MAIL_OPTION.getValue();
        String other = ReportPreference.OTHER_OPTION.getValue();
        String text = "" + getEnvironment() + "\n" + problemText; //$NON-NLS-1$//$NON-NLS-2$
        ProblemReportingHelper.buffer.report(text, email, other, false);
    }

    private void toggleDetailsArea() {
        Point windowSize = getShell().getSize();
        Point oldSize = getShell().computeSize(SWT.DEFAULT, SWT.DEFAULT);

        if (dropDownCreated) {
            dropDown.dispose();
            dropDownCreated = false;
            detailsButton.setText(IDialogConstants.SHOW_DETAILS_LABEL);
        } else {
            dropDown = createDropDownControl((Composite) getContents());
            detailsButton.setText(IDialogConstants.HIDE_DETAILS_LABEL);
        }

        Point newSize = getShell().computeSize(SWT.DEFAULT, SWT.DEFAULT);

        getShell().setSize(new Point(windowSize.x, windowSize.y + (newSize.y - oldSize.y)));

    }

    public static int openError(Shell shell, Throwable exception) {
        ErrorDialog dialog = new ErrorDialog(shell, WizardKeys.getString("ErrorDialog.DefaultWindowTitle"), //$NON-NLS-1$
                exception);
        return dialog.open();
    }

    public static int openError(Shell shell, String title, String message, Throwable t) {
        return new ErrorDialog(shell, title, message, t).open();
    }

    public static int openError(Shell shell, String title, String message) {
        ErrorDialog dialog = new ErrorDialog(shell, title, message, null);
        return dialog.open();
    }

    public static int openError(Shell shell, String message) {
        ErrorDialog dialog = new ErrorDialog(shell, WizardKeys.getString("ErrorDialog.DefaultWindowTitle"), message, //$NON-NLS-1$
                null);
        return dialog.open();
    }

    protected Image getImage() {
        return Display.getDefault().getSystemImage(SWT.ICON_ERROR);
    }

}